﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using Entidades;

namespace AccesoDatos
{
    public class UsuarioAD
    {
        //sesion no iniciada
        public static Usuario IniciarSesion(string ID, string contraseña)
        {
            Usuario nuevoUsuario = new Usuario();
            contraseña = Password.EncriptarContraseña(contraseña, ID);
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                string sql = "PA_Usuario_IniciarSesion";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@ID", ID);
                comando.Parameters.AddWithValue("@Contraseña", contraseña);
                SqlDataReader reader = comando.ExecuteReader();
                reader.Read();
                nuevoUsuario.ID = reader["ID"].ToString();
                nuevoUsuario.Contraseña = reader["Contraseña"].ToString();
                nuevoUsuario.Agencia = AgenciaAD.Buscar(reader["Agencia"].ToString());
                nuevoUsuario.Nombre = reader["Nombre"].ToString();
                nuevoUsuario.Apellidos = reader["Apellidos"].ToString();
                nuevoUsuario.Cedula = reader["Cedula"].ToString();
                nuevoUsuario.E_Mail = reader["E_Mail"].ToString();
                nuevoUsuario.Rol = RolAD.Buscar(Convert.ToInt32(reader["Rol"].ToString()));                
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conexion.Close();
            }
            return nuevoUsuario;
        }

        public static DataRow RecuperarContraseña(string e_mail, string ID)
        {
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                DataSet ds = new DataSet();
                string sql = @"PA_Usuario_RecuperarContraseña";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@E_mail", e_mail);
                comando.Parameters.AddWithValue("@ID", ID);
                SqlDataAdapter adapatador = new SqlDataAdapter(comando);
                adapatador.Fill(ds, "Usuario");
                return ds.Tables["Usuario"].Rows[0];                
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conexion.Close();
            }
        }
        //sesion iniciada
        public static void CambiarE_Mail(string e_mail, string ID)
        {            
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                string sql = @"PA_Usuario_CambiarE_Mail";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@ID", ID);
                comando.Parameters.AddWithValue("@E_Mail", e_mail);
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {                
                throw;
            }
            finally
            {
                conexion.Close();
            }            
        }

        public static void CambiarContraseña(string nuevaContraseña, string ID)
        {            
            string contraseña = Password.EncriptarContraseña(nuevaContraseña, ID);            
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);
            try
            {
                conexion.Open();
                string sql = @"PA_Usuario_CambiarContraseña";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@ID", ID);
                comando.Parameters.AddWithValue("@Contraseña", contraseña);
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {                
                throw;
            }
            finally
            {
                conexion.Close();
            }            
        }

        public static void ExisteID(string ID)
        {
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);            
            try
            {                
                conexion.Open();
                string sql = @"PA_Usuario_ExisteID";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.Parameters.AddWithValue("@ID", ID);
                comando.CommandType = CommandType.StoredProcedure;
                comando.ExecuteNonQuery();
            }
            catch (Exception)
            {                
                throw;
            }
            finally
            {
                conexion.Close();
            }           
        }

        public static void Nuevo(Usuario nuevoUsuario)
        {
            SqlConnection conexion = new SqlConnection(Conexion.CadenaConexion);            
            try
            {
                conexion.Open();
                string sql = @"PA_Usuario_Nuevo";
                SqlCommand comando = new SqlCommand(sql, conexion);
                comando.CommandType = CommandType.StoredProcedure;
                comando.Parameters.AddWithValue("@ID", nuevoUsuario.ID);
                comando.Parameters.AddWithValue("@Contraseña", Password.EncriptarContraseña(nuevoUsuario.Contraseña, nuevoUsuario.ID));
                comando.Parameters.AddWithValue("@Agencia", nuevoUsuario.Agencia.Codigo);
                comando.Parameters.AddWithValue("@Nombre", nuevoUsuario.Nombre);
                comando.Parameters.AddWithValue("@Apellidos", nuevoUsuario.Apellidos);
                comando.Parameters.AddWithValue("@Cedula", nuevoUsuario.Cedula);               
                comando.Parameters.AddWithValue("@E_Mail", nuevoUsuario.E_Mail);
                comando.Parameters.AddWithValue("@Rol", nuevoUsuario.Rol.Codigo);
                comando.ExecuteNonQuery();               
            }
            catch (Exception)
            {
                throw;
            }
            finally
            {
                conexion.Close();
            }            
        }

    }
}
